Integrated circuits (ICs) may be implemented to perform specified functions. One type of IC is a programmable IC, such as a field programmable gate array (FPGA) or a system-on-chip (SoC) including an FPGA-based programmable fabric. An FPGA fabric typically includes an array of programmable tiles. These programmable tiles may include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, dock managers, delay lock loops (DLLs), and so forth.
Each programmable the typically includes both programmable interconnect circuitry and programmable logic circuitry. The programmable interconnect circuitry typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic circuitry implements the logic of a user design using programmable elements that may include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect circuitry and programmable logic circuitry are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data may be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Some applications for programmable ICs include frequently performed functions. It is desirable to provide hardened implementations of such frequently performed functions in the programmable IC in order to conserve resources in the programmable fabric and reduce power, which enables more integration than is possible otherwise due to thermal or die size limitations.